package com.agent;

import java.lang.instrument.Instrumentation;

/**
 * @author dingrz
 * 应用程序添加启动参数：-javaagent:D:\learning\agentDemo\premainAgentDemo\target\premainAgentDemo-1.0-SNAPSHOT.jar=hello
 */
public class HelloAgent {

    /**
     * 方法签名必须这样
     * 1. Instrumentation相当于一个JVM级别的AOP
     * <p>
     * 2.Instrumentation在JVM启动的时候监听事件，
     * 如类加载事件，JVM触发来指定的事件通过回调通知，并创建一个 Instrumentation接口的实例，
     * 然后找到MANIFEST.MF中配置的实现了premain方法的Class
     *
     * @param agentArgs
     * @param inst
     * @throws InterruptedException
     */
    public static void premain(String agentArgs, Instrumentation inst) {
        System.out.println("========进入premain1方法,参数={" + agentArgs + "}=======");
    }

    /**
     * 方法签名必须这样
     *
     * @param agentArgs
     * @throws InterruptedException
     */
    public static void premain(String agentArgs) {
        System.out.println("========进入premain2方法,参数={" + agentArgs + "}=======");
    }

}
